const express = require('express');
const router = express.Router();
const jwt = require('jsonwebtoken');
const User = require('../models/User');
const { jscode2session, getUserInfoByOpenid, getAccessToken } = require('../utils/wechat');
const { authenticateToken } = require('../middleware/auth');

/**
 * 微信小程序登录接口
 * POST /wx/login
 */
router.post('/login', async (req, res) => {
  try {
    const { code } = req.body;

    if (!code) {
      return res.status(400).json({ message: '缺少登录code' });
    }

    // 调用微信API获取openid和session_key
    const sessionData = await jscode2session(code);
    const { openid, session_key } = sessionData;

    if (!openid) {
      return res.status(500).json({ message: '获取微信openid失败' });
    }

    // 查找或创建用户
    let user = await User.findOne({ where: { openid } });

    if (!user) {
      // 新用户，从微信获取用户信息
      try {
        const accessToken = await getAccessToken();
        const wechatUserInfo = await getUserInfoByOpenid(openid, accessToken);

        // 创建新用户
        user = await User.create({
          openid,
          username: `user_${openid}`,
          password_hash: 'default_password_hash',
          nickname: wechatUserInfo.nickname || '微信用户',
          avatar: wechatUserInfo.headimgurl || '',
          role: 'user'
        });
      } catch (error) {
        // 如果获取用户信息失败，创建基础用户信息
        user = await User.create({
          openid,
          username: `user_${openid}`,
          password_hash: 'default_password_hash',
          nickname: '微信用户',
          avatar: '',
          role: 'user'
        });
      }
    }

    // 生成JWT token
    const token = jwt.sign(
      { id: user.id, role: user.role },
      process.env.JWT_SECRET || 'your_jwt_secret',
      { expiresIn: '7d' }
    );

    // 更新用户最后登录时间
    await user.update({ lastLoginAt: new Date() });

    res.json({
      success: true,
      token,
      user: {
        id: user.id,
        openid: user.openid,
        nickname: user.nickname,
        avatar: user.avatar,
        role: user.role,
        createdAt: user.createdAt,
        updatedAt: user.updatedAt
      }
    });
  } catch (error) {
    console.error('微信登录失败:', error);
    res.status(500).json({ message: '微信登录失败', error: error.message });
  }
});



/**
 * 根据openid获取微信用户信息接口
 * GET /wx/user-info/:openid
 */
router.get('/user-info/:openid', authenticateToken, async (req, res) => {
  try {
    const { openid } = req.params;

    if (!openid) {
      return res.status(400).json({ message: '缺少openid参数' });
    }

    // 从数据库中查找用户
    const user = await User.findOne({ where: { openid } });

    if (!user) {
      return res.status(404).json({ message: '用户不存在' });
    }
    // 从微信服务器获取用户信息
    try {
      const accessToken = await getAccessToken();
      const wechatUserInfo = await getUserInfoByOpenid(openid, accessToken);

      // 更新用户信息
      await user.update({
        nickname: wechatUserInfo.nickname || user.nickname,
        avatar: wechatUserInfo.headimgurl || user.avatar,
        // 可以根据需要更新其他信息
      });
    } catch (error) {
      console.warn('更新微信用户信息失败:', error);
      // 不影响主流程
    }

    res.json({
      success: true,
      user: {
        id: user.id,
        openid: user.openid,
        nickname: user.nickname,
        avatar: user.avatar,
        role: user.role,
        createdAt: user.createdAt,
        updatedAt: user.updatedAt
      }
    });
  } catch (error) {
    console.error('获取微信用户信息失败:', error);
    res.status(500).json({ message: '获取微信用户信息失败', error: error.message });
  }
});

module.exports = router;
